\subsubsection{Коррекция (патчинг) адреса (Win64)}

Если наш пример скомпилирован в MSVC2013 используя опцию \TT{\textbackslash{}MD}
(подразумевая меньший исполняемый файл из-за внешнего связывания файла \TT{MSVCR*.DLL}),
ф-ция \main идет первой, и её легко найти:

\begin{figure}[H]
\centering
\myincludegraphics{patterns/01_helloworld/hiew_incr1.png}
\caption{Hiew}
\label{}
\end{figure}

В качестве эксперимента, мы можем \glslink{increment}{инкрементировать} адрес на 1:

\begin{figure}[H]
\centering
\myincludegraphics{patterns/01_helloworld/hiew_incr2.png}
\caption{Hiew}
\label{}
\end{figure}

Hiew показывает строку \q{ello, world}.
И когда мы запускаем исполняемый файл, именно эта строка и выводится.

\subsubsection{Выбор другой строки из исполняемого файла (Linux x64)}

Исполняемый файл, если скомпилировать используя GCC 5.4.0 на Linux x64, имеет множество других строк:
в основном, это имена импортированных ф-ций и имена библиотек.

Запускаю objdump, чтобы посмотреть содержимое всех секций скомпилированного файла:

\begin{lstlisting}
% objdump -s a.out

a.out:     file format elf64-x86-64

Contents of section .interp:
 400238 2f6c6962 36342f6c 642d6c69 6e75782d  /lib64/ld-linux-
 400248 7838362d 36342e73 6f2e3200           x86-64.so.2.
Contents of section .note.ABI-tag:
 400254 04000000 10000000 01000000 474e5500  ............GNU.
 400264 00000000 02000000 06000000 20000000  ............ ...
Contents of section .note.gnu.build-id:
 400274 04000000 14000000 03000000 474e5500  ............GNU.
 400284 fe461178 5bb710b4 bbf2aca8 5ec1ec10  .F.x[.......^...
 400294 cf3f7ae4                             .?z.

...
\end{lstlisting}

Не проблема передать адрес текстовой строки \q{/lib64/ld-linux-x86-64.so.2} в вызов \TT{printf()}:

\begin{lstlisting}[style=customc]
#include <stdio.h>

int main()
{
    printf(0x400238);
    return 0;
}
\end{lstlisting}

Трудно поверить, но этот код печатает вышеуказанную строку.

Измените адрес на \TT{0x400260}, и напечатается строка \q{GNU}.
Адрес точен для конкретной версии GCC, GNU toolset, итд.
На вашей системе, исполняемый файл может быть немного другой, и все адреса тоже будут другими.
Также, добавление/удаление кода из исходных кодов, скорее всего, сдвинет все адреса вперед или назад.

